package  {
    
    import flash.display.DisplayObject;
    import flash.geom.Rectangle;
    import id.core.TouchSprite;
	

    /**
	 * 
     * duplicateDisplayObject
     * Создает дубликат DisplayObject, 
     * аналогично методу duplicateMovieClip из AVM1
     * @param target Дублируемый объект
     * @param autoAdd Если true, то созданный дубликат будет добавлен
     * на сцену туда же, где и оригинал
     * @return возвращает ссылку на дубликат
     */
    public function duplicateDisplayObjecte(target:TouchSprite, autoAdd:Boolean = false):TouchSprite {
        // Создаем дубликат (constructor в кавычках, чтобы компилятор не ругался в strict mode)
        var targetClass:Class = target["constructor"];
        var duplicate:TouchSprite = new TouchSprite;
        
        // Дублируем свойства
        duplicate.transform = target.transform;
        duplicate.filters = target.filters;
        duplicate.cacheAsBitmap = target.cacheAsBitmap;
        duplicate.opaqueBackground = target.opaqueBackground;
        if (target.scale9Grid) {
            var rect:Rectangle = target.scale9Grid;
            // Баг, Flash 9 возвращает scale9Grid в  20 раз больше чем на самом деле
           // rect.x /= 20, rect.y /= 20, rect.width /= 20, rect.height /= 20;
            duplicate.scale9Grid = rect;
        }
        
        // Добавить дубликат к target.parent
        // если autoAdd установлен в true
        if (autoAdd && target.parent) {
            target.parent.addChild(duplicate);
        }
        return duplicate;
    }
}